package com.water.quality.testing.controller;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.water.quality.testing.common.R;
import com.water.quality.testing.dao.WaterData;
import com.water.quality.testing.service.ObservationPointService;
import com.water.quality.testing.service.WaterDataService;
import io.netty.util.internal.StringUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * 水质请求管理
 */
@RestController
@RequiredArgsConstructor
public class WaterDataController {
    /**
     * 使用构造器方法注入水质数据的 mapper
     */
    private final WaterDataService waterDataService;

    /**
     * 根据水质id获取水质数据
     * @param id  水质id
     */
    @GetMapping("/api/water/quality/data/{id}")
    public R<List<WaterData>> getWaterDataById(@PathVariable Long id){
        return R.success(waterDataService.getWaterDataById(id));
    }

    /**
     * 获取所有水质数据（分页查询）
     * @param pageNum  当前页
     * @param pageSize 一页显示的数据条数
     * @param observationName  观测点名字（如果没使用根据观测点名字查询，默认空字符串）
     * @param startTime 开始时间（用于查询指定区间范围的水质数据， 不传默认为 null）
     * @param endTime  结束时间（用于查询指定区间范围的水质数据，不传默认为 null）
     */
    @GetMapping("/api/water/quality/data")
    public R<IPage<WaterData>> getAllData(@RequestParam(defaultValue = "1") Integer pageNum,
                                          @RequestParam(defaultValue = "10") Integer pageSize,
                                          @RequestParam(value = "observationName", required = false) String observationName,
                                          @RequestParam(value = "startTime", required = false) String startTime,
                                          @RequestParam(value = "endTime", required = false) String endTime) {
        // 时间格式"yyyy-MM-dd HH:mm:ss"
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime start = null;
        // 如果用户按照时间范围查询则增加格式化时间
        if (!StringUtil.isNullOrEmpty(startTime)){
            start = LocalDateTime.parse(startTime, formatter);
        }
        LocalDateTime end = null;
        if (!StringUtil.isNullOrEmpty(endTime)){
            end = LocalDateTime.parse(endTime, formatter);
        }
        return R.success(waterDataService.getAllWaterData(pageNum, pageSize, observationName, start, end));
    }

    @GetMapping("/api/water/quality/data/byName")
    public R<List<WaterData>> getWaterByObservationPointName(@RequestParam("observationName") String observationName){
        return R.success(waterDataService.getWaterByObservationPointName(observationName));
    }
}